Technote 1111

Programmatic Mounting of AppleShare Volumes


ñ⁄éü

ÇÕÇ∂ÇflÇ…

AppleShare Clients 3.0 Å| 3.6.5

AppleShare Client 3.7

óvñÒ


DZÇà TECHNOTE Ç≈ÇÕÅAPBVolumeMount åƒÇ—èoǵÇégǡǃ AppleShare É{ÉäÉÖÅ[ÉÄÇÉ}ÉEÉìÉgÇ∑ÇÈï˚ñ@DžǬǢǃê‡ñæÇµÇ‹Ç∑ÅB


ÇÕÇ∂ÇflÇ…
AppleShare Client Ç≈ÇÕ PBVolumeMount ÉgÉâÉbÉvÇÉCÉìÉvÉäÉÅÉìÉgǵÅAÉfÉxÉçÉbÉpÇ™ÉvÉçÉOÉâÉÄÇ…ÇÊÇËÉ{ÉäÉÖÅ[ÉÄÇÉ}ÉEÉìÉgÇ∑ÇÈDZÇΔÇâ¬î\DžǵNjÇ∑ÅBPBVolumeMount åƒÇ—èoǵÇégǡǃÉ{ÉäÉÖÅ[ÉÄÇÉ}ÉEÉìÉgÇ∑ÇÈï˚ñ@Ç™ 2 Ǭópà”Ç≥ÇÍǃǢNjÇ∑ÅBAppleShare Client 3.7 Ç≈ÇÕÅAPBVolumeMount åƒÇ—èoǵDžêVǵǢã@î\Ç™í«â¡Ç≥ÇÍÅAAppleTalk ÇæÇØÇ≈Ç»Ç≠ TCP/IP åoóRÇ≈ÉTÅ[ÉoÇÉ}ÉEÉìÉgÇ≈Ç´ÇÈÇÊǧDžǻÇËNjǵÇΩÅB

ëÊ 1 ÇÃï˚ñ@ÇÕÅAÉÜÅ[ÉUÇ…ÇÊǡǃÉ}ÉEÉìÉgÇ≥ÇÍǃǢÇÈÉ{ÉäÉÖÅ[ÉÄÇçƒÉ}ÉEÉìÉgǵÇÊǧÇΔÇ∑ÇÈÇΔÇ´Ç…ç≈ìKÇ≈Ç∑ÅBçƒÉ}ÉEÉìÉgǵÇΩÇ¢É{ÉäÉÖÅ[ÉÄÇéØï ÇµÅAGetVolMountInfoSize ÇåƒÇ—èoǵǃäÑÇËìñǃÇÈïKóvÇÃdžÇÈ Vol Mount Block ÇÃÉTÉCÉYÇéÊìæÇµÇ‹Ç∑ÅBVol Mount Block Ç…ëŒâûÇ∑ÇÈÉÅÉÇÉäÇäÑÇËìñǃÅAGetVolMountInfo ÇåƒÇ—èoǵǃèÓïÒÇ™èëÇ´çûÇ‹ÇÍÇΩÉuÉçÉbÉNÇéÊìæÇµÇ‹Ç∑ÅBÉ{ÉäÉÖÅ[ÉÄÇçƒÉ}ÉEÉìÉgÇ∑ÇÈÇΔÇ´ÇÕÅAǪÇÍà»ëOÇ…çÏê¨Ç≥ÇÍǃǢÇÈ Vol Mount Block Çégǡǃ PBVolumeMount ÇåƒÇ—èoǵNjÇ∑ÅBGetVolMountInfo ÇÕÉpÉXÉèÅ[ÉhèÓïÒÇï‘Ç≥ǻǢÇΩÇflÅAÉpÉXÉèÅ[ÉhÇÕï Ç…äiî[ǵǃǮÇ≠ïKóvǙdžÇËÇ‹Ç∑ÅBAlias Manager Ç≈ÇÕÅADZÇÃï˚ñ@ÇégǡǃÉGÉCÉäÉAÉXÇ©ÇÁÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄÇÉ}ÉEÉìÉgǵNjÇ∑ÅB

ëÊ 2 ÇÃï˚ñ@Ç≈ÇÕÅAìΔé©Çà Vol Mount Block ÇçÏê¨ÇµÅAÉtÉBÅ[ÉãÉhÇ…ìKêÿÇ»èÓïÒÇèëÇ´çûÇÒÇæå„ÅAPBVolumeMount ÇåƒÇ—èoÇ∑DZÇΔÇ™ïKóvÇ…Ç»ÇËÇ‹Ç∑ÅBDZÇÃï˚ñ@ÇÕÇÊÇËè_ìÓê´Ç™çÇÇ¢ÇΔǢǶNjÇ∑Ç™ÅAǪÇÍÇæÇØèàóùÇÕï°éGÇ…Ç»ÇËÇ‹Ç∑ÅBè⁄ç◊DžǬǢǃÇÕÅAMoreFiles Sample Code Ç…ä‹Ç‹ÇÍÇÈÉRÅ[ÉhÇéQçlÇ…Ç∑ÇÈDZÇΔÇÇ®Ç∑Ç∑ÇflǵNjÇ∑ (ReferencesÉZÉNÉVÉáÉìÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢)ÅB

ÉRÅ[Éhó· #1: AppleShare Client ÇÃÉoÅ[ÉWÉáÉìÇÃåüèo


const   short   kASver_3_5      = 1;
const   short   kASver_3_6      = 2;
const   short   kASver_3_6_1    = 3;
const   short   kASver_3_6_2    = 4;
const   short   kASver_3_6_3    = 5;    // 3.6.3ÅA3.6.4ÅA3.6.5 Çä‹Çfi
const   short   kASver_3_7      = 6;    // 3.7.1 Çä‹Çfi
const   short   kASver_3_7_2    = 7;

short   ClientVersion(void)
{
    long    result;
    OSError theError = noErr;

    theError = Gestalt('afps',&result);
    if(!theError)
    {
        return(result & 0x0000ffff);
    }
    return 0;
}



AppleShare Clients 3.0 Å| 3.6.5
ÉoÅ[ÉWÉáÉì 3.7 ÇÊÇËLJëOÇà AppleShare Client ÇÕ AppleTalk åoóRÇ≈ÇÃÇ›É{ÉäÉÖÅ[ÉÄÇÉ}ÉEÉìÉgǵNjÇ∑ÅBMoreFiles Sample Code Ç…ÇÕÅAPBVolumeMount() åƒÇ—èoǵÇégǡǃÅAÉTÅ[ÉoñºÇΔÉpÉXÉèÅ[ÉhÇ™éwíËÇ≥ÇÍÇΩÉ{ÉäÉÖÅ[ÉÄÇÉ}ÉEÉìÉgÇ∑ÇÈégópó·Ç™ópà”Ç≥ÇÍǃǢNjÇ∑ÅBå›ä∑ê´Çç≈ëÂå¿Ç…à€éùÇ∑ÇÈÇΩÇflÅAAFPVolMountInfo ç\ë¢ëÃÇà UAMType Ç…ÇÕ 1 (ÉQÉXÉgÉçÉOÉCÉìÇÃèÍçá) Ç‹ÇΩÇÕ 3 (ÉpÉXÉèÅ[ÉhÇégÇ¡ÇΩÉçÉOÉCÉìÇÃèÍçá) Çê›íËǵǃÇ≠ÇæÇ≥Ç¢ÅB



struct AFPVolMountInfo {
    short       length;               /* ÉçÉPÅ[ÉVÉáÉìÉfÅ[É^ÇÃí∑Ç≥ (DZÇÃÉtÉBÅ[ÉãÉhǪÇÃLJÇÃÇä‹Çfi) */
    VolumeType  media;                /* ÉÅÉfÉBÉAÇÃÉ^ÉCÉv */
    short       flags;                /* ÉÅÉbÉZÅ[ÉWÅAçƒê⁄ë±Ç™Ç»Ç¢Ç©Ç«Ç§Ç©ÇéwíËÇ∑ÇÈÉrÉbÉg */
    SInt8       nbpInterval;          /* NBP Interval ÉpÉâÉÅÅ[É^ (IM2, p.322 ÇéQèΔ) */
    SInt8       nbpCount;             /* NBP Interval ÉpÉâÉÅÅ[É^ (IM2, p.322 ÇéQèΔ) */
    short       uamType;              /* ÉÜÅ[ÉUîFèÿï˚ñ@ */
    short       zoneNameOffset;       /* ç\ë¢ëÃÇÃêÊì™Ç©ÇÁ Zone Name Ç‹Ç≈Çà short Ç≈ê≥ÇÃÉIÉtÉZÉbÉg */
    short       serverNameOffset;     /* Pascal ï∂éöóÒ Server Name Ç‹Ç≈ÇÃÉIÉtÉZÉbÉg */
    short       volNameOffset;        /* Pascal ï∂éöóÒ Volume Name Ç‹Ç≈ÇÃÉIÉtÉZÉbÉg */
    short       userNameOffset;       /* Pascal ï∂éöóÒ User Name Ç‹Ç≈ÇÃÉIÉtÉZÉbÉg */
    short       userPasswordOffset;   /* Pascal ï∂éöóÒ User Password Ç‹Ç≈ÇÃÉIÉtÉZÉbÉg */
    short       volPasswordOffset;    /* Pascal ï∂éöóÒ Volume Password Ç‹Ç≈ÇÃÉIÉtÉZÉbÉg */
    char        AFPData[176];         /* â¬ïœí∑ÉfÅ[É^Ç™ë±Ç≠èÍçá */
};
typedef struct AFPVolMountInfo AFPVolMountInfo;



AppleShare Client 3.7
AppleShare Client 3.7 Ç…ÇÕÅAÉ{ÉäÉÖÅ[ÉÄÇÃÉ}ÉEÉìÉgÇèàóùÇ∑ÇÈè„Ç≈Ç¢Ç≠ǬǩÇÃêVã@î\Ç™í«â¡Ç≥ÇÍǃǢNjÇ∑ÅB

AFPXVolMountInfo ÇégÇ¡ÇΩ PBVolumeMount
éüÇÃíËã`Çå©ÇÍÇŒÅAAFPXVolMountInfo ç\ë¢ëÃÇ™ëOèqÇà AFPVolMountInfo ç\ë¢ëÃÇÃägí£Ç≈džÇÈDZÇΔÇ™Ç∑ÇÆÇ…ÇÌÇ©ÇËÇ‹Ç∑ÅB3 ǬÇÃêVǵǢÉtÉBÅ[ÉãÉhÇΔ 2 ǬÇÃêVǵǢÉtÉâÉOÉrÉbÉgÇégópÇ∑ÇÈÇΔÅAÉfÉxÉçÉbÉpÇÕ TCP/IP Ç‚ UAM ÇÉTÉ|Å[ÉgÇ∑ÇÈÇΩÇflÇ…ïKóvÇ»èÓïÒÇéwíËÇ≈Ç´ÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅBÇ‡ÇøÇÎÇÒ 3.7 Client Ç≈ÇÕÅAà»ëOÇà AFPVolMountInfo ç\ë¢ëÃLJÉTÉ|Å[ÉgÇ≥ÇÍǃǢNjÇ∑ÅB

éüÇ…ÅAç≈êVÇà Files.h Ç…ä‹Ç‹ÇÍÇÈíËã`Çé¶ÇµÇ‹Ç∑ÅB



/* AFPXVolMountInfo ÇÕêVǵǢ AFP É{ÉäÉÖÅ[ÉÄÉ}ÉEÉìÉgèÓïÒÉåÉRÅ[ÉhÇ≈ÅA3.7 AppleShare Client ÇïKóvÇΔÇ∑ÇÈ */

struct AFPXVolMountInfo {
    short         length;                 /* ÉçÉPÅ[ÉVÉáÉìÉfÅ[É^ÇÃí∑Ç≥ (DZÇÃÉtÉBÅ[ÉãÉhǪÇÃLJÇÃÇä‹Çfi) */
    VolumeType    media;                  /* ÉÅÉfÉBÉAÇÃÉ^ÉCÉv */
    short         flags;                  /* ÉÅÉbÉZÅ[ÉWÅAçƒê⁄ë±Ç™Ç»Ç¢Ç©Ç«Ç§Ç©ÇéwíËÇ∑ÇÈÉrÉbÉg */
    SInt8         nbpInterval;            /* NBP Interval ÉpÉâÉÅÅ[É^ (IM2, p.322 ÇéQèΔ) */
    SInt8         nbpCount;               /* NBP Interval ÉpÉâÉÅÅ[É^ (IM2, p.322 ÇéQèΔ) */
    short         uamType;                /* ÉÜÅ[ÉUîFèÿï˚ñ@ÇÃÉ^ÉCÉv */
    short         zoneNameOffset;         /* ç\ë¢ëÃÇÃêÊì™Ç©ÇÁ Zone Name Ç‹Ç≈Çà short Ç≈ê≥ÇÃÉIÉtÉZÉbÉg */
    short         serverNameOffset;       /* Pascal ï∂éöóÒ Server Name Ç‹Ç≈ÇÃÉIÉtÉZÉbÉg */
    short         volNameOffset;          /* Pascal ï∂éöóÒ Volume Name Ç‹Ç≈ÇÃÉIÉtÉZÉbÉg */
    short         userNameOffset;         /* Pascal ï∂éöóÒ User Name Ç‹Ç≈ÇÃÉIÉtÉZÉbÉg */
    short         userPasswordOffset;     /* Pascal ï∂éöóÒ User Password Ç‹Ç≈ÇÃÉIÉtÉZÉbÉg */
    short         volPasswordOffset;      /* Pascal ï∂éöóÒ Volume Password Ç‹Ç≈ÇÃÉIÉtÉZÉbÉg */
    short         extendedFlags;          /* ägí£Ç≥ÇÍÇΩÉtÉâÉOÉèÅ[Éh */
    short         uamNameOffset;          /* Pascal ï∂éöóÒ UAM Name Ç‹Ç≈ÇÃÉIÉtÉZÉbÉg */
    short         alternateAddressOffset; /* É^ÉOÉtÉHÅ[É}ÉbÉgÇà Alternate Addresses Ç‹Ç≈ÇÃÉIÉtÉZÉbÉg */
    char          AFPData[176];           /* â¬ïœí∑ÉfÅ[É^Ç™ë±Ç≠èÍçá */
};
typedef struct AFPXVolMountInfo AFPXVolMountInfo;

typedef AFPXVolMountInfo *              AFPXVolMountInfoPtr;

/* É{ÉäÉÖÅ[ÉÄÉ}ÉEÉìÉgÉtÉâÉO */

enum {
    volMountNoLoginMsgFlagBit   = 0,         /* VolumeMount Ç÷ÇÃì¸óÕ: ÉZÉbÉgÇ≥ÇÍǃǢÇÈèÍçáÅAÉtÉ@ÉCÉãÉVÉXÉeÉÄÇÕ */
    volMountNoLoginMsgFlagMask  = 0x0001,    /* ÉçÉOÉCÉìÉÅÉbÉZÅ[ÉWÉ_ÉCÉAÉçÉOÇï\é¶ÇµÇ»Ç¢ */
    volMountExtendedFlagsBit    = 7,         /* VolumeMount Ç÷ÇÃì¸óÕ: ÉZÉbÉgÇ≥ÇÍǃǢÇÈèÍçáÅAÉ}ÉEÉìÉgèÓïÒÇÕ */
    volMountExtendedFlagsMask   = 0x0080,    /* 3.7 AppleShare Client Ç…ëŒâûÇ∑ÇÈ AFPXVolMountInfo ÉåÉRÅ[Éh */
    volMountInteractBit         = 15,        /* VolumeMount Ç÷ÇÃì¸óÕ: ÉZÉbÉgÇ≥ÇÍǃǢÇÈèÍçáÅAÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ™ */
    volMountInteractMask        = 0x8000,    /* É{ÉäÉÖÅ[ÉÄÇÉ}ÉEÉìÉgÇ∑ÇÈÇΩÇflÇ…ÉÜÅ[ÉUÇÃëÄçÏÇé¿çsÇ∑ÇÈDZÇΔÇ™ãñâ¬Ç≥ÇÍÇÈ */
    volMountChangedBit          = 14,        /* VoumeMount Ç©ÇÁÇÃèoóÕ: ÉZÉbÉgÇ≥ÇÍǃǢÇÈèÍçáÅAÉ{ÉäÉÖÅ[ÉÄÇÕÉ}ÉEÉìÉgÇ≥ÇÍǃǢÇΩÇ™ÅA */
    volMountChangedMask         = 0x4000,    /* É{ÉäÉÖÅ[ÉÄÇÃÉ}ÉEÉìÉgèÓïÒÉåÉRÅ[ÉhÇÕçXêVÇ≥ÇÍÇÈïKóvǙdžÇÈ */
    volMountFSReservedMask      = 0x00FF,    /* ÉrÉbÉg 0-7 ÇÕǪÇÍǺÇÍÇÃÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ™ìΔé©Ç…égópÇ∑ÇÈÇΩÇflÇ…íËã`Ç≥ÇÍǃǢÇÈ */
    volMountSysReservedMask     = 0xFF00     /* ÉrÉbÉg 8-15ÇÕ Apple ÉVÉXÉeÉÄÇ™égópÇ∑ÇÈÇΩÇflÇ…ó\ñÒÇ≥ÇÍǃǢÇÈ */
};

enum {
    kAFPExtendedFlagsAlternateAddressMask = 1  /* AFPXVolMountInfo.extendedFlags ÇÃÉrÉbÉgÇ≈ÅAalternateAddressOffset Ç™égópÇ≥ÇÍǃǢÇÈDZÇΔÇà”ñ°Ç∑ÇÈ */
};


 AFPXVolMountInfo

PBVolumeMount ÉgÉâÉbÉvÇÃêVã@î\ÇégópÇ∑ÇÈÇΩÇflÇ…ÇÕÅAAFPXVolMountInfo ç\ë¢ëÃÇÃÉtÉâÉOÉèÅ[ÉhÇ≈ extendedFlagsBit ÇÉZÉbÉgǵÅAÇ≥ÇÁÇ…êVǵǢ VMIB íËã`ÇégópÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBǪÇÍǺÇÍÇÃÉIÉtÉZÉbÉgÉtÉBÅ[ÉãÉhÇÕÅAç\ë¢ëÃÇÃêÊì™Ç©ÇÁñ‚ëËÇÃÉfÅ[É^Ç‹Ç≈Çà 16 ÉrÉbÉgÉIÉtÉZÉbÉgÇéwíËǵNjÇ∑ÅBï∂éöóÒÉtÉBÅ[ÉãÉhÇãÛÇÃNjNjDžǵǃǮÇ≠Ç…ÇÕÅAÉIÉtÉZÉbÉgÇ™ãÛîíï∂éöóÒÇ "É|ÉCÉìÉg" ǵǃǢÇÈïKóvǙdžÇËÇ‹Ç∑ÅBíPèÉÇ… offset = 0 ÇÃNjNjDžǵǃǮÇ≠DZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅB

AppleShare Client Ç…ÉçÉOÉCÉìÉ_ÉCÉAÉçÉOÇï\é¶Ç≥ÇπÇÈÇ…ÇÕÅAÉtÉâÉOÉèÅ[ÉhÇà volMountInteractBit ÇÉZÉbÉgǵNjÇ∑ÅBÉZÉbÉgÇ≥ÇÍÇΩÉrÉbÉgÇégǡǃ PBVolumeMount åƒÇ—èoǵÇé¿çsÇ∑ÇÈëOÇ…ÅAA5 ÉèÅ[ÉãÉhÇï€éùǵǃǢǃÅAQuickDraw ÇΔ Dialog Manager Çèâä˙âªÇµÇƒÇ¢ÇÈDZÇΔÇämîFǵǃÇ≠ÇæÇ≥Ç¢ÅBÇ‹ÇΩÅAApple ïWèÄÇ≈ÇÕǻǢ UAM ÇégópÇ∑ÇÈèÍçáLJÅADZÇÃÉrÉbÉgÇÉZÉbÉgǵǃǮÇ≠ïKóvǙdžÇËÇ‹Ç∑ÅBAppleShare Client 3.7.2 Ç®ÇÊǗǪÇÍà»è„ÇÃèÍçáÅAAFPXVolMountInfo ç\ë¢ëÃÇÃÉ{ÉäÉÖÅ[ÉÄñºÇÉuÉâÉìÉNÇÃNjNjDžǵǃǮÇ≠ÇΔÅAAppleShare Client ÇÕÉ{ÉäÉÖÅ[ÉÄëIëÉEÉBÉìÉhÉEÇï\é¶ÇµÅAÉÜÅ[ÉUÇÕÇ«ÇÃÉ{ÉäÉÖÅ[ÉÄÇÉ}ÉEÉìÉgÇ∑ÇÈÇ©ëIëÇ≈Ç´ÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅB

uamNameOffset ÉIÉtÉZÉbÉgÇÕÅADZÇÃê⁄ë±Ç≈égópÇ∑ÇÈ UAM (User Authentication Module) Çé¶Ç∑ Pascal ï∂éöóÒÇ‹Ç≈ÇÃÉIÉtÉZÉbÉgÇéwíËǵNjÇ∑ÅBÇ‹ÇΩÅAuamType ÉtÉBÅ[ÉãÉhÇÉZÉbÉgÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBUAM Name ï∂éöóÒDžǬǢǃÇÕå„èqǵNjÇ∑ÅB

Alternate Address ÉIÉtÉZÉbÉgÇÕÅAIP ÉAÉhÉåÉXÇä‹ÇfiÉ^ÉOÉfÅ[É^ÇÃÉuÉçÉbÉNÇ‹Ç≈ÇÃÉIÉtÉZÉbÉgÇéwíËǵNjÇ∑ÅBDZÇÃÉuÉçÉbÉNÇÕÉoÅ[ÉWÉáÉìÉoÉCÉgÇΔÉJÉEÉìÉgÉoÉCÉgÇ©ÇÁénÇ‹ÇËÅAǪÇÃå„Ç…ÇÕç≈ë 255 ÇÃÉ^ÉOÉAÉhÉåÉXÇ™ë±Ç´Ç‹Ç∑ÅBÉtÉHÅ[É}ÉbÉgDžǬǢǃÇÕå„èqǵNjÇ∑ÅBåªç›ÇÃÉoÅ[ÉWÉáÉìÉoÉCÉgÇÕ 0x00 Ç≈Ç∑ÅB


IP ÉAÉhÉåÉXÇ÷ÇÃê⁄ë±
TCP/IP ÇâÓǵǃÉTÅ[ÉoÇ…ê⁄ë±Ç∑ÇÈÇ…ÇÕÅAIP ÉAÉhÉåÉXÇÉAÉhÉåÉXÉ^ÉOÇ…ÉRÉsÅ[ǵÅAǪÇÃÉAÉhÉåÉXÉ^ÉOÇ Alternate Address ÉtÉBÅ[ÉãÉhÇ…íuÇ≠ïKóvǙdžÇËÇ‹Ç∑ÅBåªç›égópíÜÇÃèÍçáÇ≈LJÉTÅ[ÉoñºÇ™ïKóvÇ≈Ç∑ÅBÉ]Å[ÉìñºÇ‡éwíËÇ∑ÇÈÇΔÅAClient ÇÕ TCP/IP åoóRÇ≈ê⁄ë±Ç≈ǴǻǢèÍçáÇ… AppleTalk Ç…ñflÇËÇ‹Ç∑ÅBAppleTalk Ç…ñflÇÈèÍçáÅAClient ÇÕÉtÉâÉOÉèÅ[ÉhÇà volMountChangedBit ÇÉZÉbÉgÇ∑ÇÈDZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅBÇΩÇΔǶnjÅAÉAÉhÉåÉX 128.0.10.1 Ç…ëŒâûÇ∑ÇÈ Alternate Address ÉtÉBÅ[ÉãÉhÇÕéüÇÃÇÊǧDžǻÇËÇ‹Ç∑ÅB

0x00 0x01 0x08 0x02 0x80 0x00 0x0A 0x01 0x02 0x24


Client ÇÕDZÇÃÉAÉhÉåÉXÇégǡǃÅAÉAÉhÉåÉX 128.0.10.1 Ç…ÇÊǡǃé¶Ç≥ÇÍÇÈÉ}ÉVÉìè„Çà TCP/IP É|Å[Ég 548 åoóRÇ≈ÉfÉtÉHÉãÉgÇà AFP Ç…ê⁄ë±Ç∑ÇÈDZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅB


ÉAÉhÉåÉXÇ…ëŒâûÇ∑ÇÈÉ^ÉOÉfÅ[É^
êVǵǢÉ^ÉOÉfÅ[É^ÇÕÉAÉhÉåÉXÉtÉHÅ[É}ÉbÉgÇÃïœçXÇ…ëŒâûǵǃǢNjÇ∑ÅBDZÇÍÇ…ÇÊÇËÅAÉNÉâÉCÉAÉìÉgÇÕÉCÉìÉ^ÉtÉFÅ[ÉXÇ…ïœçXÇâ¡Ç¶ÇÈDZÇΔÇ»Ç≠ÅAIPv6 (IPNG) ǻǫÇÃêVǵǢÉAÉhÉåÉXéwíËÇÃïWèÄÇÉTÉ|Å[ÉgÇ≈Ç´ÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅBAlternate Address óÃàÊÇÃêÊì™ÉoÉCÉgÇÕÉoÅ[ÉWÉáÉìÉoÉCÉgÇ≈ÅAåªç›ÇÕ 0 Ç…ÉZÉbÉgÇ≥ÇÍǃǢNjÇ∑ÅBDZÇÃå„Ç…ÇÕÅAAFPAlternateAddress ç\ë¢ëà (íËã`ÇÕà»â∫Ç…é¶ÇµÇ‹Ç∑) Ç™ë±Ç´Ç‹Ç∑ÅBÇ»Ç∫ÉoÅ[ÉWÉáÉìÉoÉCÉgÇ™ AFPAlternateAddress ç\ë¢ëÃÇ…ä‹Ç‹ÇÍǃǢǻǢÇÃÇ©ÇΔǢǶnjÅAAFPAlternateAddress ç\ë¢ëÃÇ™ AFP 2.2 Çà ServerInfo ÉäÉvÉâÉCÉÅÉbÉZÅ[ÉWÇÃíÜÇ≈LJégópÇ≥ÇÍÇÈÇΩÇflÇ≈Ç∑ÅB

ǪÇÍǺÇÍÇÃÉfÅ[É^çÄñ⁄ÇÕÅAí∑Ç≥ÉoÉCÉgÅAtagID ÉoÉCÉgÅAÇ®ÇÊÇ—ç≈ë 254 ÉoÉCÉgÇÃÉfÅ[É^Ç©ÇÁç\ê¨Ç≥ÇÍÇ‹Ç∑ÅBǬNjÇËÅA| í∑Ç≥ | É^ÉO | ç≈ë 254 ÉoÉCÉgÇÃÉfÅ[É^ | ÇΔǢǧDZÇΔÇ≈Ç∑ÅB

3.7 Client ÇÕéüÇÃÇÊǧǻÉ^ÉOÇîFéØÇµÇ‹Ç∑ÅB
í∑Ç≥ tagID ê‡ñæ
0x06 0x01 äÓñ{ìIÇ» IP ÉAÉhÉåÉXÅB4 ÉoÉCÉgÇ≈É|Å[Égî‘çÜÇä‹Ç‹Ç»Ç¢ÅB
0x08 0x02 É|Å[ÉgÇä‹Çfi IP ÉAÉhÉåÉXÅB4 ÉoÉCÉgÇÃÉAÉhÉåÉXÅA2 ÉoÉCÉgÇÃÉ|Å[ÉgÅB


í∑Ç≥ÉoÉCÉgÇÕÅAí∑Ç≥ÉoÉCÉgÇä‹ÇflÇΩÉ^ÉOëSëÃÇÃí∑Ç≥ÇéwíËǵNjÇ∑ÅBÇ∑Ç◊ǃÇÃÉtÉBÅ[ÉãÉhÇÕÉlÉbÉgÉèÅ[ÉNÉoÉCÉgèá (MSB Ç™êÊì™) Ç…ï¿ÇÒÇ≈ǢNjÇ∑ÅB

éüÇ…ÅAç≈êVÇà Files.h Ç…ä‹Ç‹ÇÍÇÈíËã`Çé¶ÇµÇ‹Ç∑ (DZÇÍÇÕÅAUniversal Interfaces & Libraries v3.0.1 ÇÃàÍïîÇ≈Ç∑)ÅB



enum {    /* AFPTagData.fType ÉtÉBÅ[ÉãÉhÇ≈égópÇ∑ÇÈíËêî */
    kAFPTagTypeIP        = 0x01,
    kAFPTagTypeIPPort    = 0x02,
    kAFPTagTypeDDP       = 0x03    /* åªç›ÇÕñ¢égóp */
};



enum {    /* AFPTagData.fLength ÉtÉBÅ[ÉãÉhÇ≈égópÇ∑ÇÈíËêî */
    kAFPTagLengthIP        = 0x06,
    kAFPTagLengthIPPort    = 0x08,
    kAFPTagLengthDDP       = 0x06
};

struct AFPTagData {
    UInt8    fLength;     /* fLength ÉtÉBÅ[ÉãÉhÇä‹ÇflÇΩDZÇÃÉfÅ[É^É^ÉOÇÃí∑Ç≥ */
    UInt8    fType;
    UInt8    fData[1];    /* â¬ïœí∑ÉfÅ[É^ */
};
typedef struct AFPTagData AFPTagData;

struct AFPAlternateAddress {
    UInt8    fAddressCount;
    UInt8    fAddressList[1];    /* AFPTagData ÇÃé¿ç€Ç…â¬ïœí∑ÉpÉbÉNÇ≥ÇÍÇΩÉZÉbÉg */
};
typedef struct AFPAlternateAddress AFPAlternateAddress;



ÉJÉXÉ^ÉÄ UAM ÇégÇ¡ÇΩÉ{ÉäÉÖÅ[ÉÄÇÃÉ}ÉEÉìÉg
UAM ÇÕ 1 ǬÇÃÉZÉåÉNÉ^ÇÇΔÇÈÅAÉVÉìÉOÉãÉGÉìÉgÉäÉ|ÉCÉìÉgÇä‹ÇÒÇæÉRÅ[ÉhÉäÉ\Å[ÉXÇ≈Ç∑ÅBUAM ÇÕ 'uams' ÇΔǢǧÉ^ÉCÉvÇÃÉtÉ@ÉCÉãÇÃíÜÇ…ä‹Ç‹ÇÍǃǢǃÅAAppleShare Client Çägí£Ç∑ÇÈÇΩÇflÇ…égópǵNjÇ∑ÅBUAM ÇégópÇ∑ÇÈDZÇΔÇ≈ÅAAppleShare Client ÇÕïWèÄÇΔÇÕàŸÇ»ÇÈîFèÿï˚éÆÇégÇ¡ÇΩÉTÅ[ÉhÉpÅ[ÉeÉBÇÃÉTÅ[ÉoÇ…ê⁄ë±Ç≈Ç´ÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅBí èÌÅAUAM ÇÕÉpÉXÉèÅ[ÉhÇ®ÇÊÇ—É{ÉäÉÖÅ[ÉÄëIëÉ_ÉCÉAÉçÉOÇï\é¶ÇµÇ‹Ç∑ÅBDZÇÃÇΩÇflÅAVolMountInfo ÉuÉçÉbÉNÇÃÉtÉâÉOÉèÅ[ÉhÇÃíÜÇ≈ volMountInteractBit Ç™ÉZÉbÉgÇ≥ÇÍÇƒÇ¢Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBUAM ÇÕÉVÉXÉeÉÄÉtÉHÉãÉ_ÇÃÉãÅ[ÉgÉåÉxÉãDždžÇÈÅgAppleShare ÉtÉHÉãÉ_ÅhÇ…äiî[Ç≥ÇÍÇ‹Ç∑ÅB

îFèÿÇÃÇΩÇflÇ…ÉTÅ[ÉhÉpÅ[ÉeÉB UAM ÇégópÇ∑ÇÈÇ…ÇÕÅAêVǵǢ VMIB íËã`Çégópǵ (ÉtÉâÉOÉèÅ[ÉhÇà extendedFlagsBit ÇÉZÉbÉgǵǃ)ÅA'uamg' id 0 ÉäÉ\Å[ÉX (UAM ÉtÉ@ÉCÉãÇÃ) Ç©ÇÁ uamType ÉtÉBÅ[ÉãÉhÇ… UAM É^ÉCÉvÇîzíuǵÅAUAM Name Ç VMIB Çà uamNameOffset ÇÃà íuÇ…îzíuǵNjÇ∑ÅBDZÇÃå„Ç≈ PBVolumeMount() ÇåƒÇ—èoǵǃÇ≠ÇæÇ≥Ç¢ÅB

PBVolumeMount åƒÇ—èoǵÇé¿çsÇ∑ÇÈëOÇ…ÅAA5 ÉèÅ[ÉãÉhÇï€éùǵǃǢǃÅAInitGraf Ç®ÇÊÇ— InitDialogs ÇåƒÇ—èoǵǃǢÇÈDZÇΔÇämîFǵǃÇ≠ÇæÇ≥Ç¢ÅBǻǮÅAÉTÅ[ÉhÉpÅ[ÉeÉB UAM ÇÕÅAåªç›ÇÃÇΔDZÇÎ (AppleShare Client 3.7.2 Ç®ÇÊǗǪÇÍà»è„Ç≈ÇÕ) AppleTalk ÇÃÇ›ÇâÓǵÇΩê⁄ë±Ç…êßå¿Ç≥ÇÍǃǢNjÇ∑ÅB


UAMName
DZÇÍÇÕÅAUAM Ç…ëŒÇ∑ÇÈ AFP ÉvÉçÉgÉRÉãñºÇ≈ÅAUAM ÉtÉ@ÉCÉãÇ… 'uamn' id 1 ÉäÉ\Å[ÉXÇΔǵǃäiî[Ç≥ÇÍǃǢNjÇ∑ÅBDZÇÍÇÕ Pascal ï∂éöóÒÇ≈Ç∑ÅB

íçà”
Ç∑Ç◊ǃÇÃç\ë¢ëÃÇÕ 68k ÉAÉâÉCÉìÇ≈Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB


óvñÒ
êVǵǢ PBVolumeMount ÉCÉìÉ^ÉtÉFÅ[ÉXÇÕÅAAppleShare ÉtÉ@ÉCÉãÉTÅ[ÉoÇÉ}ÉEÉìÉgÇ∑ÇÈÇΩÇflÇÃÇ≥NjǥNjǻÉIÉvÉVÉáÉìÇÉfÉxÉçÉbÉpÇ…íÒãüǵNjÇ∑ÅBPBVolumeMount ÇÕÉçÉOÉCÉìÇ®ÇÊÇ—É{ÉäÉÖÅ[ÉÄëIëÉ_ÉCÉAÉçÉOÇï\é¶Ç≈Ç´Ç‹Ç∑ÅBÇ‹ÇΩÅAÉZÉåÉNÉ^ÇégǡǃåƒÇ—èoÇ≥ÇÍÇÈ AppleShare Client ÇΔNjǡÇΩÇ≠ìØÇ∂ï˚ñ@Ç≈ÉJÉXÉ^ÉÄ UAM ÇégópÇ∑ÇÈDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅBÇ≥ÇÁÇ…ÅAAppleTalk Ç‹ÇΩÇÕ TCP/IP ÇégǡǃÉTÅ[ÉoÇ…ê⁄ë±Ç∑ÇÈDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅB


éQçlï∂å£

çXêVì˙: 1997 îN 10 åé 31 ì˙